//
//  Problem905.swift
//  TestProject
//
//  Created by 武侠 on 2021/4/20.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 905. 按奇偶排序数组
 给定一个非负整数数组 A，返回一个数组，在该数组中， A 的所有偶数元素之后跟着所有奇数元素。
 你可以返回满足此条件的任何数组作为答案。
 示例：
     输入：[3,1,2,4]
     输出：[2,4,3,1]
     输出 [4,2,3,1]，[2,4,1,3] 和 [4,2,1,3] 也会被接受。
 提示：

 1 <= A.length <= 5000
 0 <= A[i] <= 5000
 */
@objcMembers class Problem905: NSObject {
    func solution() {
        print(sortArrayByParityPoint([3,1,2,4]))
    }
    
    /*
     已知条件：
     1: 数组A：非负
     思路：
     1: 创建2个数组，分别存储奇数和偶数
     */
    
    /*
     2个数组方案
     */
    func sortArrayByParity(_ A: [Int]) -> [Int] {
        var ji:[Int] = []
        var ou:[Int] = []
        for n in A {
            if n % 2 == 0 {
                ou.append(n)
            } else {
                ji.append(n)
            }
        }
        return ou + ji
    }
    
    /*
     使用数组的sort方法
     */
    func sortArrayByParitySort(_ A: [Int]) -> [Int] {
        var B = A
        B.sort { (first, second) -> Bool in
            return (first % 2) < (second % 2)
        }
        return B
    }
    
    /*
     创建一个数组，遇到奇数从尾部插入，遇到偶数从头部插入
     */
    func sortArrayByParityPoint(_ A: [Int]) -> [Int] {
        var B = A
        var i = 0
        var j = A.count - 1
        for n in A {
            if n % 2 == 0 {
                B[i] = n
                i += 1
            } else {
                B[j] = n
                j -= 1
            }
        }
        return B
    }
}
